<?php

namespace App\Http\Controllers\Backend;

use App\Repositories\FormValueRepository;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Raindance\RainAdmin\Services\ResponseUtil;

class FormValueController extends Controller
{
    private $repo;
    public function __construct(FormValueRepository $repo)
    {
        $this->middleware(['web', 'admin']);
        $this->repo = $repo;
    }

    public function store(Request $request){
        try {
            if (!extension_loaded('oci8')){
                return ResponseUtil::failed('OCI8类库没有加载，请检查扩展是否开启!',200);
            }
            $input = $request->all();
            $decodeData = $this->decodeQrcode($input);
            return ResponseUtil::success($decodeData);
            //第三步：  跟根据字段中类型来判断用户二维码属于什么类型  隐患排查   三级危险点
            $insertData = collect($decodeData)->except(['a'])->toArray();

            if (!isset($decodeData['a']) && ($decodeData['a'] !== 1 && $decodeData['a'] !== 2 ) ){
                return ResponseUtil::failed('二维码数据内容不正确',200);
            }
            if ($decodeData['a'] === 1){
                $table = 'SAFE_11_HIDDEN_DANGER_ACCOUNT';
                // 隐患
            }elseif ($decodeData['a']=== 2){
                // 危险点
                $table = 'SAFE_HAZA_CHECKLIST';
            }
            $res = $this->saveData($table,$insertData);
            return ResponseUtil::success($res);
        }catch (\Exception $exception){
            $message = $exception->getMessage();
            if (str_contains($message,'违反唯一约束条件')){
                return ResponseUtil::failed('该二维码已录入,请勿重复录入!',200);
            }elseif(str_contains($message,'unserialize(): Error')){
                return ResponseUtil::failed('二维码数据内容错误',200);
            }
            return ResponseUtil::failed($message,200);
        }
    }

    /**
     * 解码二维码数据
     * @param Request $input
     * @return mixed
     */
    private function decodeQrcode($input){
        $strArr =  explode("\n",str_replace("\\000026","",$input['remark']));
        if(!str_contains($input['remark'],"\\000026")){
            return ResponseUtil::failed('二维码数据内容不正确！',200);
        }
        $temp = [];
        $base64encodeStr = "";
        $count = 0;
        $arr = collect($strArr)->map(function($item,$key)use($temp,&$count){
            if (strlen($item)<=0) return false;
            list($encodeSubStr,$params) = explode("|",$item);
            $temp['encode_str'] = $encodeSubStr;
            parse_str($params,$paramsArr);
            $temp['params'] = $paramsArr;
            $count = (int)$paramsArr['c'];
            return $temp;
        });
        if ($count !== count($arr)){
            return ResponseUtil::failed('二维码数量不对，请确认后重新扫码！',200);
        }
        $arr->sortBy(function ($params,$key){
            if (!$params) return false;
            return $params['params']['n'];
        })->each(function($item,$key)use(&$base64encodeStr){
            if (!$item) return false;
            return $base64encodeStr .= $item['encode_str'];
        });
        // 第二步： base64解码 第三步：反序列化解密后的数据
        if (!$base64encodeStr) return ResponseUtil::failed('二维码数据内容不正确',200);
        $decodeData =  unserialize(base64_decode($base64encodeStr));
        return $decodeData;
    }

    private function saveData($table,$data){
//        $hidden = DB::connection('oracle')->table('SAFE_11_HIDDEN_DANGER_ACCOUNT')->get()->toArray();
//        $hiddenData = [
//            'ID'=>Uuid::uuid4()->toString(),
//            'CREATE_BY'=>'张三',            // 创建人           填报人
//            'CREATE_TIME'=>Carbon::now()->toDateTimeString(),          // 创建时间         填报时间
//            'SYS_ORG_CODE'=>'A01A01',         // 所属部门         目前放入本系统组织ID
//            'INVESTIGATE_TIME'=>'2021-04-21',     // 排查日期
//            'HIDDEN_DANGER'=>'测试',        // 隐患概况
//            'HIDDEN_POSITION'=>'部位',      // 隐患所在部位
//            'HIDDEN_CATEGORY'=>'类别',      // 隐患类别
//            'HIDDEN_GRADE'=>'等级',         // 隐患等级
//            'REFORM_STEP'=>'措施',          // 整改措施
//            'INVEST'=>1000,               // 投入资金
//            'REFORM_PERSON'=>'李四',        // 整改责任人
//            'REFORM_TIME'=>Carbon::now()->toDateTimeString(),          // 整改期限
//            'REFORM_FINISH_TIME'=>Carbon::now()->toDateTimeString(),   // 整改完成期限
//            'REFORM_FINISH_PERSON'=>'李四',     // 整改完成验收人
//            'REVIEW_TIME'=>Carbon::now()->toDateTimeString(),          // 复查日期
//            'REVIEW_PERSON'=>'张三',        // 复查验收人
//        ];

//        $dangerData = [
//            "ID" => str_replace('-','',Uuid::uuid1()->toString()),
//            "UNIT" => "内蒙古北方重工业集团有限公司,特钢事业部,103车间",
//            "RISK_LEVEL" => "三级",
//            "RISK_NUM" => "345",
//            "RISK_POSITION" => "热处理",
//            "MAIN_FACTOR" => "爆炸触电",
//            "POSS_HAZARDS" => "触电",
//            "YEAR" => "2021",
//            "INSPECT_TYPE" => "公司领导",
//            "CHECK_TIME" => "2021-04-26",
//            "FIND_PROBLEM" => "fdsaasdf",
//            "RECT_MEASURES" => "fdasdfa",
//            "FIX_TIME" => "2021-04-26",
//            "PROCESS_RESULT" => "已确认",
//            "SYS_ORG_CODE" => 207,
//            "CREATE_BY" => "刘利红",
//            "CREATE_TIME" => "2021-04-26 18:24:28",
//        ];

        return DB::connection('oracle')->table($table)->insert($data);
    }
}
